package com.ghyf.mplay.bean;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;

import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;

import com.ghyf.mplay.datatype.AlignMode;
import com.ghyf.mplay.datatype.BackParam;
import com.ghyf.mplay.datatype.DateParam;
import com.ghyf.mplay.datatype.FontParam;
import com.ghyf.mplay.datatype.GradientColorType;
import com.ghyf.mplay.datatype.POS;
import com.ghyf.mplay.datatype.RGBA;
import com.ghyf.mplay.datatype.ShowLang;

import com.ghyf.mplay.view.MDate;

/**
 * 显示日期模块的信息包装类
 * @author 陈小红
 *
 */
public class DateInfo extends BaseModuleInfo {

	@Override
	public MDate getView(Context context) {
		mContext=context;
		mDate = new MDate(context);
		//设置控件基本属性
		mDate.setModule_type(module_type);
		mDate.setzOrder(zOrder);
		mDate.setFile_version(file_version);
		mDate.setModule_name(module_name);
		mDate.setModule_uid(module_uid);
		mDate.setModule_gid(module_gid);
		// 控件位置及大小设置。
		initPosition(mDate, pos);

		// 背景设置
		initBackground(mDate, backgroud);

		// 对齐方式
		mDate.setGravity(Gravity.CENTER);

		// 设置左、上的padding（用left、top margin变量设置）
		mDate.setPadding(left_margin, top_margin, 0, 0);

		mDate.setShow_date(show_date);
		mDate.setDate_Lang(date_Lang);
		mDate.setDate_param(date_param);
		mDate.setDate_font(date_font);
		mDate.setShow_week(show_week);
		mDate.setWeek_lang(week_lang);
		mDate.setWeek_font(week_font);
		mDate.setmDate(mDate);

		return mDate;
	}

	/**
	 * 初始化控件的背景
	 * 
	 * @param viwe
	 *            被设置的控件
	 * @param bg
	 *            控件的背景
	 */
	void initBackground(View view, BackParam bg) {
		switch (bg.getType()) {
		case NOTSHOW: // 背景不显示
			break;
		case GRADIENTCOLOR: // 背景类型为渐变色
			if (bg.getColorType() == GradientColorType.HORIZONTALGRADIENT) {
				//水平渐变 参考：url:http://blog.csdn.net/a_large_swan/article/details/7107126
				int startColor = Color.argb(bg.getGradientcolor1().getAlpha(), bg.getGradientcolor1().getRed(), bg.getGradientcolor1().getGreen(),
						bg.getGradientcolor1().getBlue());
				int endColor = Color.argb(bg.getGradientcolor2().getAlpha(), bg.getGradientcolor2().getRed(), bg.getGradientcolor2().getGreen(),
						bg.getGradientcolor2().getBlue());
				GradientDrawable gradientDrawable=new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,new int[]{startColor,endColor});
				view.setBackgroundDrawable(gradientDrawable);
			} else {
				// 垂直渐变
				int startColor = Color.argb(bg.getGradientcolor1().getAlpha(), bg.getGradientcolor1().getRed(), bg.getGradientcolor1().getGreen(),
						bg.getGradientcolor1().getBlue());
				int endColor = Color.argb(bg.getGradientcolor2().getAlpha(), bg.getGradientcolor2().getRed(), bg.getGradientcolor2().getGreen(),
						bg.getGradientcolor2().getBlue());
				GradientDrawable gradientDrawable=new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM,new int[]{startColor,endColor});
				view.setBackgroundDrawable(gradientDrawable);
			}
			break;
		case PICTURE: // 背景类型为图片
			//TODO 本地图片文件路径生成drawable，出现警告
			Bitmap bitmap = BitmapFactory.decodeFile(bg.getBkfile().getPath());
			Drawable drawable = new BitmapDrawable(mContext.getResources(),bitmap);
			// 设置图片背景
			view.setBackgroundDrawable(drawable);
			break;
		case PURECOLOR: // 背景类型为纯色
			RGBA purecolor = bg.getPurecolor();
			view.setBackgroundColor(Color.argb(purecolor.getAlpha(),
					purecolor.getRed(), purecolor.getGreen(),
					purecolor.getBlue()));
			break;
		default: // 其他
			break;
		}
	}

	/**
	 * 初始化控件的位置
	 * 
	 * @param view
	 *            被设置的控件
	 * @param pos
	 *            控件的位置
	 */
	void initPosition(View view, POS pos) {
		view.setX(pos.getLeft());
		view.setY(pos.getTop());
		view.setLayoutParams(new LayoutParams(pos.getWidth(), pos.getHeight()));
	}
	/**
	 * 设置当前View显示/隐藏
	 * 2014-5-21 下午3:25:01
	 * @param isShow
	 *
	 */
	public void setVisibility(boolean isShow){
		if(isShow){
			mDate.setVisibility(View.VISIBLE);
		}else{
			mDate.setVisibility(View.GONE);
		}
	}
	/*
	 * File_Version CHAR 1 Module_Name CHAR Date1 Module_UID INT Module_GIU INT
	 * Mudule_Pos POS - Backgroud BACK_PARAM 见§3.1.4节 - Align ENUM 5 Left_Margin
	 * INT 0 Top_Margin INT 0 Show_Date BOOL TRUE Date_Lang Enum 中文/英文/数字 1
	 * Date_Param - Show_Seq ENUM 年月日/月日年/日月年 0 Year_Show ENUM 不显示/显示2位/显示4位 4
	 * MD_SHow ENUM 仅当显示类型为数字时有效 1 Year_Tip CHAR 仅当显示类型为数字或中文时有效 年 Month_Tip
	 * CHAR 月 Day_Tip CHAR 日 Date_Font FONT_PARAM 见§3.1.2节 宋体40号 Show_Week BOOL
	 * TRUE Week_Lang Enum 中文/英文 1 Week_Font FONT_PARAM 见§3.1.2节 宋体40号
	 */
	private Context mContext=null;
	// <Backgroud Type="3" PureColor="(0,0,0,255)" GradientColor1="(0,0,0,255)"
	// GradientColor2="(0,0,0,255)" BKFile="" GradientColorType="0"/>
	private BackParam backgroud;

	// <Align>5</Align>
	private AlignMode align;// 对齐方式

	// <Left_Margin>0</Left_Margin>
	private int left_margin;// 左边距

	// <Top_Margin>0</Top_Margin>
	private int top_margin;// 上边距

	// <Show_Date>1</Show_Date>
	private boolean show_date;// 是否显示

	// <Date_Lang>1</Date_Lang>
	private ShowLang date_Lang;// 显示日期的语言

	// <Date_Param Show_Seq="0" Year_Show="4" MD_Show="1"
	// Year_Tip="年" Month_Tip="月" Day_Tip="日" />
	private DateParam date_param; // 日期显示格式。

	// <Date_Font Name="宋体" Size="40" Width="0" Escapement="0" Orientation="0"
	// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
	// FaceColor="(0,0,0,255)" EdgeWidth="0" EdgeColor="(0,0,0,255)"
	// ShadowWidth="0" ShadowColor="(0,0,0,255)" ShadowAngle="0" />
	private FontParam date_font;// 日期字体

	// <Show_Week>1</Show_Week>
	private boolean show_week;// 是否显示星期

	// <Week_Lang>1</Week_Lang>
	private ShowLang week_lang;// 显示星期的语言

	// <Week_Font Name="宋体" Size="40" Width="0" Escapement="0" Orientation="0"
	// Kerning="0" Spacing="0" Bold="0" Italic="0" Underline="0"
	// FaceColor="(0,0,0,255)" EdgeWidth="0" EdgeColor="(0,0,0,255)"
	// ShadowWidth="0" ShadowColor="(0,0,0,255)" ShadowAngle="0" />
	private FontParam week_font;// 显示星期的字体。

	private MDate mDate;

	public BackParam getBackgroud() {
		return backgroud;
	}

	public void setBackgroud(BackParam backgroud) {
		this.backgroud = backgroud;
	}

	public AlignMode getAlign() {
		return align;
	}

	public void setAlign(AlignMode align) {
		this.align = align;
	}

	public int getLeft_margin() {
		return left_margin;
	}

	public void setLeft_margin(int left_margin) {
		this.left_margin = left_margin;
	}

	public int getTop_margin() {
		return top_margin;
	}

	public void setTop_margin(int top_margin) {
		this.top_margin = top_margin;
	}

	public boolean isShow_date() {
		return show_date;
	}

	public void setShow_date(boolean show_date) {
		this.show_date = show_date;
	}

	public ShowLang getDate_Lang() {
		return date_Lang;
	}

	public void setDate_Lang(ShowLang date_Lang) {
		this.date_Lang = date_Lang;
	}

	public DateParam getDate_param() {
		return date_param;
	}

	public void setDate_param(DateParam date_param) {
		this.date_param = date_param;
	}

	public FontParam getDate_font() {
		return date_font;
	}

	public void setDate_font(FontParam date_font) {
		this.date_font = date_font;
	}

	public boolean isShow_week() {
		return show_week;
	}

	public void setShow_week(boolean show_week) {
		this.show_week = show_week;
	}

	public ShowLang getWeek_lang() {
		return week_lang;
	}

	public void setWeek_lang(ShowLang week_lang) {
		this.week_lang = week_lang;
	}

	public FontParam getWeek_font() {
		return week_font;
	}

	public void setWeek_font(FontParam week_font) {
		this.week_font = week_font;
	}


}
